این مطلب یکی از مقالات پرونده ویژه«متدولوژیها، الگوها و معماری نرمافزار» شماره 207 ماهنامه شبکه است. علاقهمندان میتوانند کل این پرونده ویژه را از روی سایت شبکه دانلود کنند.
شرکتهای نرمافزاری بهخوبی از این موضوع آگاه هستند که امروزه مشتریان به دنبال آن هستند تا محصول موردنیاز خود را در سریعترین زمان ممکن و بالاترین کیفیت ممکن دریافت کنند. یک اصل مهم در دنیای نرمافزار اعلام میدارد که شما هیچگاه نمیتوانید یک محصول نرمافزاری کامل که همه نیازهای کاربران را در خود جایداده باشد، تولید کنید. آن هم نیازهایی که همواره در حال تغییر هستند. مشتریان این روزهای شرکتهای نرمافزاری، به این نتیجهگیری کلی رسیدهاند که این امکان وجود ندارد تا میزان اثرگذاری یک محصول بر فعالیت کارکنان و کل مجموعه را پیش از بهکارگیری عملی آن ارزیابی کرد. به عبارت دقیقتر مشتریانی که سفارش ساخت محصولی را میدهند بهدرستی نمیدانند نرمافزار جدیدی که سفارش دادهاند چگونه با سیستمهای دیگر ارتباط برقرار خواهد کرد و کدامیک از فعالیتهای کارمندان آنها بهطور کامل تحت تاثیر استقرار نرمافزار جدید قرار خواهد گرفت. یک محصول نرمافزاری تنها زمانیکه بهطور کامل استقرار پیدا کرد و کارکنان با آن کار کردند، کاستیهای خود را نشان خواهد داد. طراحی و استقرار یک سایت نمونه روشنی در این زمینه است.
نکته مهمی که شرکتهای نرمافزاری باید به آن توجه داشته باشند، بهکارگیری مدل درستی برای توسعه نرمافزار است. شما در نخستین برخورد با مشتری و درخواستی که ارائه میکند باید بهسرعت متوجه شوید که چه مدلی برای ساخت محصول مناسب است. همواره باید به این اصل مهم توجه داشته باشید که مشتریان شما ممکن است پس از عقد قرارداد و در زمان طراحی یا پیادهسازی نرمافزار درخواست خود را تغییر داده یا درخواست جدیدی ارائه کنند، در چنین شرایطی سیستم نیازمند کار و آزمایش مجدد است. در اینگونه موارد بهکارگیری یک مدل آبشاری معمولی یا فرآیندی که بر اساس خصوصیات پایه و ثابت کار میکند، در عمل زمان طراحی محصول را طولانیتر کرده و ممکن است زمان تحویل محصول را به تاخیر اندازند.
انتخاب متدولوژی درست کلید موفقیت کسبوکار شما
شرکتها و بهویژه استارتآپها در فضایی کار خود را آغاز میکنند که سرعت حرف اول را میزند. این موضوع از دو منظر قابل بررسی است. موردی که در پاراگراف قبل به آن اشاره شد یکی از مشکلات رایج شرکتهای نرمافزاری است و متاسفانه اگر شرکتی به این درخواستهای در حال تغییر مشتری بهدرستی پاسخ ندهد یا بیتوجهی کند، در کوتاهترین زمان مشتری خود را از دست خواهد داد. به دلیل اینکه تکنیک بازاریابی دهانبهدهان (یک الگوی موثر در بازاریابی استارتآپی) به روش معکوس کار کرده و اعتبار شرکت را خراب خواهد کرد.
اما نکته بسیار مهم دیگری که باید به آن توجه داشته باشید، بهویژه اگر مالک یک کسبوکار نوپا هستید در ارتباط با تحویل بهموقع محصول است. مهمترین عاملی که باعث شکست استارتآپها و شرکتهای نرمافزار نوپا میشود، تاخیر است. کسبوکار شما محصولی را طراحی کرده، اما درست زمانیکه نرمافزار در دسترس قرار گرفته و آماده استفاده است، دلیل و ایده اصلی که نرمافزار بر اساس آن ساختهشده تغییر پیدا کرده و نرمافزار به محصولی بیمصرف تبدیلشده است. به همین دلیل است که در ارتباط با برخی از کسبوکارهای ویژه ما از فرآیندهای توسعه و تحویل سریع نرمافزار استفاده میکنیم. اگرچه روشهای زیادی برای توسعه سریع نرمافزار وجود دارد اما همه آنها دارای یکسری ویژگیهای اساسی هستند. این ویژگیها به شرح زیر هستند:
- طراحی و پیادهسازی همزمان با هم انجام میشود. در این مدلها هیچگونه جزئیاتی در ارتباط با ویژگیهای سیستم وجود نداشته و طراحی مستندات به شکل حداقلی است. مستنداتی که بهطور عمده در محیط برنامهنویسی نوشته میشوند.
- سیستم در وضعیت توسعه افزایشی طراحی میشود. کاربران نهایی و دیگر ذینفعان سیستم در تعیین و ارزیابی هر یک از این مراحل مشارکت دارند. آنها ممکن است تغییراتی در سیستم به وجود آورده یا نیازمندیهای جدیدی ارائه کنند که باید در مراحل بعدی توسعه اعمال شوند.
- رابطهای کاربری سیستم در بیشتر موارد با استفاده از یک سیستم توسعه تکاملی که اجازه میدهد، طراحی رابط بهسرعت با استفاده از آیکونها و تصاویر ساخته شود، انجام گیرد. سیستم در ادامه ممکن است یک رابط وبمحور را برای یک مرورگر یا یک رابط برای یک پلتفرم خاص همچون ویندوز مایکروسافت تولید کند.
متدولوژیهای توسعه افزایشی و سریع که در شمارههای گذشته مجله (193 و 189) به آنها اشاره داشتیم، شامل تولید و تحویل نرمافزار در حالت افزایشی بهجای یک محصول واحد است. هر فرآیند تکرارشونده یک محصول افزایشی جدیدی را تولید میکند. مدل افزایشی یک مزیت اصلی در زمان توسعه نرمافزار به همراه دارد و آن چیزی نیست جزء تحویل سریع محصول به مشتری.
نسخههای افزایشی اولیه از یک محصول میتوانند ویژگیهایی را که اولویت بالاتری دارند، به مشتریان نشان دهند که در نتیجه مشتریان به ارزش واقعی سیستم از طریق نسخههای اولیه واقف خواهند شد. مشتریان با مشاهده محصول میتوانند مشاهده کنند که آیا نیازهای مدنظر آنها در محصول اعمالشده و آیا به تغییراتی نیاز است که باید در نسخههای بعدی محصول اعمال شوند یا خیر. تعامل مشتری با توسعهدهندگان سیستم باید در فرآیند توسعه افزایشی در نظر گرفتهشده باشد، به دلیل اینکه آنها باید بازخوردهایی در اختیار تیم توسعه قرار دهند تا بازخوردها در نمونههای افزایشی بعدی اعمال شوند. اما مشارکت این افراد به معنای آن نیست که سیستم بهاحتمالزیاد هماهنگ با نیازهای آنها طراحی میشود. بلکه تضمینکننده این موضوع است که سیستم بهاحتمالزیاد بر اساس نیازهای مدنظر آنها کار کند. شکل (1)،
مدلی از یک فرآیند توسعه افزایشی را نشان میدهد. توجه کنید تمرکز این مدل فرآیندها در مراحل اولیه روی طراحی معماری قرار دارد. اگر به معماری در شروع این فرآیندها توجهی نشود، ساختار کلی سیستم بهاحتمالزیاد بیثبات بوده و مدلهای توسعه افزایشی ساختهشده نیز متزلزل خواهند بود.
متدولوژیهای چابک
در دهه 80 و اوایل دهه 90 میلادی، دیدگاهی با این مضمون رواج پیدا کرد که بهترین راه برای ساخت نرمافزارهایی با بالاترین کیفیت، بهکارگیری روشهایی است که از ابزارهای CASE پشتیبانی میکنند. ابزارهایی که به تیمهای توسعه اجازه میدهند بر فرآیندهای توسعه نرمافزار کنترل دقیقی داشته باشند. این دیدگاه بهویژه از طرف جامعه مهندسانی ارائه شد که در زمینه طراحی و ساخت پروژههای بزرگ به فعالیت اشتغال داشتند. افرادی که وظیفه آنها ساخت سامانههایی با طول عمر بالا بود که از ترکیب تعداد زیادی سامانه منفرد از یکدیگر به وجود میآمدند. در سال 2001 انجمنی متشکل از توسعهدهندگان نرمافزار و طرفداران روشهای متدولوژیهای سبکوزن به وجود آمد که سعی داشتند ویژگیهای مختلف و شاخص مبتنی بر متدولوژیهای سبکوزن را شناسایی کنند. این انجمن با هدف رسیدن به دیدگاهی منسجم و واحد گرد یکدیگر آمدند و سرانجام موفق شدند بیانیه مشترکی را که مانیفست (Manifesto) نامیده میشود، منتشر کنند. در این بیانیه یکسری اصول، ارزشها و قوانین برای توسعه سریع نرمافزارها معرفی شدند که به اصول متدولوژی چابک معروف شدند. از مهمترین اصولی که این بیانیه مشترک بر آنها تاکید دارد، موارد زیر میتوان اشاره کرد:
- فراهم آوردن زمینه رضایت مشتری از طریق تحویل سریع و مداوم نرمافزار.
- انعطافپذیر بودن در برابر تغییرات حتی اگر پروژهها در مراحل پایانی طراحی قرار داشته باشند.
- انتشار نسخههای آزمایشی نرمافزار در بازههای زمانی منظم.
- برقراری ارتباط منسجم میان کاربران و تیم توسعهدهنده نرمافزار.
- مستندسازی قابل استناد.
- پشتیبانی از یک فرآیند تولید یکنواخت و باثبات
- •بهکارگیری افراد متخصص و واجد شرایط
- سادهسازی کارها با حذف موارد غیرضروری
- بررسی عملکرد و کارایی تیم در بازههای زمانی مشخص
بهطورکلی، مدل توسعه نرمافزاری چابک را مجموعهای از متدولوژیهای توسعه نرمافزار شکل میدهند که بر مبنای تکامل تدریجی و تکرارشونده کار میکنند. مجموعهای که در آن، راهحلها از طریق خودسازماندهی و همکاری فیمابینی تیمها به دست میآید. به عبارت دقیقتر، متدولوژی چابک یک چارچوب مفهومی است که سعی میکند تعامل میان مشتریان و تیم توسعهدهنده در سراسر چرخه توسعه حفظ شود. از مهمترین مدلهای مبتنی بر متدولوژی چابک میتوان به مدل افزایشی (Incremental)، تعاونی (Cooperative)، مستقیم (Straightforward)، تطبیقی (Adaptive) و.... اشاره کرد. شکل (2) مدل توسعه چابک را نشان میدهد.
امروزه، مدلهای توسعه سبکوزن مختلفی وجود دارند که هر یک در ارتباط با پروژههای خاصی به کار گرفته میشوند. در ادامه با چند مورد از معروفترین مدلها آشنا خواهید شد.
ASD سرنام (Adaptive Software Development)
توسعه تطبیقی نرمافزار، یکی از فرآیندهای توسعه نرمافزار است که توسط جیم های اسمیت و سام بایر طراحی شد. (شکل 3)
این مدل برای ساخت سیستمها و نرمافزارهای پیچیده استفاده میشود. این مدل بر اساس دو ایده اصلی ماهیت سازگاری مبتنی بر مولفه و همکاری گروهی به کار گرفته میشود. تفکر و تعمق (Speculation)، همکاری (Collaboration) و یادگیری (Learning) سه فاز اصلی این مدل را شکل میدهند. ASD بهعنوان جایگزینی برای مدل توسعه سنگینوزن آبشاری سنتی ارائه شد. در این مدل از یک الگوی تکرارشوندگی روی فاز اصلی استفاده میشود.
Agile Modeling) AM)
متدولوژیای است که برای مستندسازی و مدلسازی سیستمهای نرمافزاری به کار گرفتهشده و همواره بر انتخاب بهترین روشها تاکید دارد. این مدل را مجموعهای از اصول و ارزشهایی شکل میدهند که روی یک پروژه توسعه نرمافزاری چابک استفاده میشوند. این متدولوژی انعطافپذیری بیشتری نسبت به روشهای سنتی دارد. در نتیجه با سیستمهایی که تغییرات در آنها بهسرعت انجام میشود، تناسب بهتری دارد. AM بهعنوان قسمتی از مجموعه توسعه نرمافزاری چابک شناخته میشود. (شکل 4)
Crystal family
Crystal Clear عضوی از خانواده متدولوژیهای Crystal family است که توسط آلیستر کوکبرن طراحی شد. متدولوژی کریستال یکی از سبکوزنترین و تطبیقپذیرترین متدولوژیها برای توسعه نرمافزارهاست. کریستال را مجموعهای از راهکارهای چابک همچون Clear Crystal ،Crystal Yellow ،Crystal Orange و... شکل میدهند که هر یک از آنها دارای یک مشخصه مخصوص به خود هستند که در یکسری از فاکتورها همچون اندازه تیم، حق اولویت پروژه و حساسیت پروژه با یکدیگر تفاوتهایی دارند. بهطورکلی، این مدل برای تیمهایی که متشکل از 6 یا 8 نفر هستند و سیستمهایی که دارای حساسیت خیلی بالا نیستند، مناسب است. Crystal family بهجای آنکه روی فرآیندها یا محصولات متمرکز باشد روی مردم متمرکز است. از ویژگیهای مثبت این روش میتوان به مبانی طراحی، قابلیت انتخاب مناسبترین روش بر اساس اندازه و حساس بودن پروژه اشاره کرد. شکل (5) خانواده این مدل را نشان میدهد.
Disciplined agile delivery
چرخه حیات در چارچوب DAD از سه فاز اصلی آغاز (Inception)، ساخت (Construction) و انتقال (Transition) ساختهشده که هر یک از این سه فاز، اهداف خاص خود را دارند و در هر یک فعالیتهایی در جریان بوده که خود این فعالیتها دارای تعدادی نقطه عطف (Milestone) هستند. هر کدام از فازهای DAD دارای سه بخش هماهنگسازی، همکاری و نتیجهگیری هستند. (شکل 6)
متدهای چابک چطور کار میکنند؟
اساس کار متدهای چابک بر تقسیم پروژه به بخشهای کوچک و برنامهریزی برای هر بخش که معمولا در بازه زمانی یک تا چهار هفته است، تکمیل و اضافه کردن بخشهای تکمیلشده به بخشهای دیگر تمرکز دارد. در نتیجه در متدهای چابک نیازی به یک برنامهریزی کلی و در نظر گرفتن تمامی جزییات در ابتدای کار نیازی نیست. در این روش هر بازه زمانی، یک چرخه توسعه کامل نرمافزار است که برنامهریزی، تجزیهوتحلیل نیازها، طراحی، کدنویسی، تست واحد و آزمایش نهایی را شامل میشود. یکی از بزرگترین مزیتهای این روش کاهش ریسک کلی پروژه و امکان تطابق سریع با تغییرات است. همانگونه که در ابتدای مطلب اشاره کردیم، در این روش هدف این است که در هر بازه زمانی یک بخش قابلارائه از نرمافزار با حداقل مشکلات تولید شود. در هر بازه زمانی کارها بر اساس حق اولویت انجام میشود. اولویتبندی در جلسههایی که میان مشتریان و توسعهدهندگان برگزار میشود، مشخص میشوند. با توجه به اینکه متدهای چابک بر انعطافپذیری تاکید خاصی دارند در نتیجه روشهای چابک با توسعه مبتنی بر تکرارشوندگی که در آنها تطابق اهمیت زیادی دارد در ارتباط هستند و این درست همان موضوعی است که با برنامهریزی بلندمدت سازگار نیست. فرآیند تطبیق دو فاکتور مهم تغییر در فرآیند تولید و تغییر در نرمافزار را شامل میشود.
چرخه عمر توسعه نرمافزار
متدهای چابک بر جنبههای مختلفی از چرخه عمر توسعه نرمافزار تمرکز دارند. (شکل 7)
بعضی از آنها بر روشها (برنامهنویسی مفرط، برنامهنویسی فعال و مدلسازی چابک)، برخی بر مدیریت پروژههای نرمافزاری (مانند اسکرام)، برخی بر تمام چرخه عمر توسعه نرمافزار (متدهای توسعه پویای یک سیستم و فرآیند توسعه یکپارچه) و برخی دیگر بر تعیین نیازمندیها تاکید دارند. بنابراین، یک تفاوت آشکار بین متدهای گوناگون توسعه چابک نرمافزار وجود دارد. اگرچه متدهای توسعه پویای یک سیستم و فرآیند توسعه یکپارچه نیازی به رویکردهای مکمل برای پشتیبانی از توسعه نرمافزار ندارند، بقیه آنها با درجههای متفاوت به این مکملها نیاز دارند. فراموش نکنید حتی مدلهای پیچیدهای همچون متدهای توسعه پویای یک سیستم میتوانند از سوی هر توسعهدهندهای به کار گرفته شوند.
به این مطلب چند ستاره میدهید؟(امتیاز: 3.4 - رای: 3)
- منبع: ماهنامه شبکه